#!/usr/bin/env python
#coding:utf-8

from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from flask import Flask

#引入模板功能
from flask import render_template

#申明一个映射，declarative_base类维持一个从类到表的关系，通常1个应用使用1个base实例，所有的实体应该继承此类的对象。
Base = declarative_base()

#create engine返回一个Engine的实例，Engine实例只有触发数据库事件才真正的去连数据库，echo设置的是SQLalchemy的日志记录
engine = create_engine('sqlite:////tmp/quiz.db', echo=True)

#这个定制的Session类，把新创建的Session对象绑定到数据库实例engine
Database = sessionmaker(bind=engine)

#实例化一个Flask类，一个参数必须指定，程序主模块的名字）
app=Flask(__name__,template_folder='/tmp/')	


'''
定义一个映射的表，表名称，数据类型的列。sqlalchemy就是把Base的子类转变为数据库的表，定义好以后会生成table及__map__对象
'''
class ApplyCode(Base):
	__tablename__ = 'quiz' #表名称，至少需要1个
	stat_id = Column('stat_id', Integer, primary_key=True) #至少1个列是主键
	content_id = Column('content_id', Integer)
	timestamp = Column('timestamp', String)
	duration = Column('duration', Integer)
	
	def __init__(self,stat_id,content_id,timestamp,duration):
		self.stat_id = stat_id
		self.content_id = content_id
		self.timestamp = timestamp
		self.duration = duration
	
	def __repr(self):
		return "<quiz('%s','%s','%s','%s')>" % (self.stat_id,self.content_id,self.timestamp,self.duration)
	

#装饰器 app.route,把装饰器函数注册为路由，flask app 收到请求后，根据url选择对应的路由，路由和视图函数之间有对应关系，因此url决定了运行哪个函数
@app.route('/')
def quiz():
    result={}
    body=[]
    db = Database() #实例化这个session
    query = db.query(ApplyCode)
    data  = query.all() #查询返回结果，返回的是列表
    return render_template('quiz.html',body=data)

#用run方法来启动开发测试web服务器
if __name__=='__main__':
    app.run(debug=True,port=5000,host='0.0.0.0')